package model

import (
	"html/template"
	"time"
)

const (
	ROLE_USER = "USER" // 普通用户角色
	ROLE_VIP  = "VIP"  // VIP用户角色
)

// WebUser 用户实体
type WebUser struct {
	ID        int64    `json:"id" bson:"_id,omitempty"`    // ID (主键ID 不对外暴露)
	Username  string   `json:"username" bson:"username"`   //username 作为user的业务唯一ID（简称userId）                    // username
	Password  string   `json:"password" bson:"password"`   // 密码 (密文)
	Phone     string   `json:"phone" bson:"phone"`         // 手机号
	Email     string   `json:"email" bson:"email"`         // 邮箱
	AvatarUrl string   `json:"avatarUrl" bson:"avatarUrl"` // 头像URL
	Nickname  string   `json:"nickname" bson:"nickname"`   // 昵称
	Profile   string   `json:"profile" bson:"profile"`     // 个人简介
	Score     int      `json:"score" bson:"score"`         // 积分
	Status    int      `json:"status" bson:"status"`       // 账号状态：0未激活——> 1已激活
	Roles     []string `json:"roles" bson:"roles"`         //角色

	CreateTime time.Time `json:"createTime,omitempty" bson:"createTime,omitempty"` // 创建时间
	UpdateTime time.Time `json:"updateTime,omitempty" bson:"updateTime,omitempty"` // 更新时间

	Interest *UserInterest `json:"interest,omitempty" bson:"-"` //关联用户兴趣实体
}

const UserCollectionName = "web_user" // 集合名常量

// UserInterest 用户兴趣实体
type UserInterest struct {
	ID           int64    `json:"id" bson:"_id,required"`           // user表(主键ID 不对外暴露)
	UserId       string   `json:"userId" bson:"userId,required"`    // 用户业务ID
	FollowIds    []string `json:"followIds" bson:"followIds"`       // 我的关注列表
	FansIds      []string `json:"fansIds" bson:"fansIds"`           // 我的粉丝列表
	BlacklistIds []string `json:"blacklistIds" bson:"blacklistIds"` // 我的黑名单列表
}

const UserInterestCollectionName = "user_interest" // 集合名常量

// Moment 通知实体
// 属性Topic+TargetId+Receiver是唯一的
type Moment struct {
	ID       int64       `json:"id" bson:"_id,omitempty"`  // ID (主键ID 不对外暴露)
	Topic    MomentTopic `json:"topic" bson:"topic"`       // 通知类型
	TargetId string      `json:"targetId" bson:"targetId"` // 关联目标ID（如文章ID、评论ID等）
	Receiver string      `json:"receiver" bson:"receiver"` // 通知接收用户

	ContentFormat string `json:"contentFormat" bson:"contentFormat"` // 通知内容格式
	Content       string `json:"content" bson:"content"`             // 通知内容
	//Read          bool   `json:"read" bson:"read"`                   // 是否已读

	CreateTime time.Time `json:"createTime,omitempty" bson:"createTime,omitempty"` // 创建时间

	RenderedContent template.HTML `json:"renderedContent" bson:"-"` // 渲染后的html内容

}

const MomentCollectionName = "moment" // 集合名常量

type Notification struct {
	ID       int64  `json:"id" bson:"_id,omitempty"`  // ID (主键ID 不对外暴露)
	Topic    string `json:"topic" bson:"topic"`       // 通知类型
	TargetId string `json:"targetId" bson:"targetId"` // 关联目标ID（如文章ID、评论ID等）
	Receiver string `json:"receiver" bson:"receiver"` // 通知接收用户
	Content  string `json:"content" bson:"content"`   // 通知内容
	Read     bool   `json:"read" bson:"read"`         // 是否已读

	CreateTime time.Time `json:"createTime,omitempty" bson:"createTime,omitempty"` // 创建时间

	RenderedContent template.HTML `json:"renderedContent" bson:"-"` // 渲染后的html内容

}

// Feedback 反馈意见实体
type Feedback struct {
	ID           int64        `json:"id" bson:"_id,omitempty"`          // ID (主键ID 不对外暴露)
	Content      string       `json:"content" bson:"content"`           // 反馈内容
	Kind         FeedbackKind `json:"kind" bson:"kind"`                 // 反馈类型
	Status       int          `json:"status" bson:"status"`             // 状态：0反馈中——> 1已结束
	Contact      string       `json:"contact" bson:"contact"`           // 联系方式
	ReplyContent string       `json:"replyContent" bson:"replyContent"` // 回复内容

	CreateBy   string    `json:"createBy" bson:"createBy"`                         // 创建人
	CreateTime time.Time `json:"createTime,omitempty" bson:"createTime,omitempty"` // 创建时间
}

const FeedbackCollectionName = "feedback" // 集合名常量
